

import org.springframework.beans.factory.annotation.Autowired;

import cn.common.mybatis.Translator;

/**mybtis里xml使用ongl调用的静态方法，用来把约定的sql片段转成特定数据库的sql*/
public class Generator 
{
	private static Translator translator;
	
	/** <value expr="@Generator@batchBegin()"/> */ 
	public static String batchBegin()
	{
		return translator.batchBegin();
	}
	
	/** <value expr="@Generator@batchEnd()"/> */ 
	public static String batchEnd()
	{
		return translator.batchEnd();
	}
	
	/**当前时间：sysdate
	 * <value expr="@Generator@sysdate()"/> */ 
	public static String sysdate()
	{
		return translator.sysdate();
	}
	
    /**序列：nextvalSql('')
     * <value expr="@Generator@nextvalSql('序列名')"/>
     * 
     * oracle正则替换:
     * ^(\s*)SELECT\s+(.*?)\.NEXTVAL FROM DUAL
     * $1<value expr="@Generator@nextvalSql('$2')"/>*/ 
	public static String nextvalSql(String seqName)
	{
		if(seqName==null)
			return null;
		return translator.nextvalSql(seqName);
	}
	
	/**序列：nextval('')
		<value expr="@Generator@nextval('序列名')"/>
		
		oracle正则替换
		\b([\w_]*?)\.NEXTVAL
		<value expr="@Generator@nextval('$1')"/> */ 
	public static String nextval(String seqName)
	{
		if(seqName==null)
			return null;
		return translator.nextval(seqName);
	}
	
	/**连接字符串：concate(,,,,)	ognl不能识别变长参数
	 * <value expr="@Generator@concat('','','')"/>
	 * 
	 * oracle正则替换：
	 * '%'\|\|(.*?)\|\|'%'
	 * <value expr="@Generator@concat('\\'%\\'','$1','\\'%\\'')"/>
	 * */ 
	public static String concat(String str,String str1,String str2)
	{
		if(str==null||str1==null||str2==null)
			return "";
		return translator.concat(str,str1,str2);
	}
	
	/**连接字符串：concate(,,,,)	
	 * <value expr="@Generator@concat('','')"/>*/ 
	public static String concat(String str,String str1)
	{
		if(str==null||str1==null)
			return "";
		return translator.concat(str,str1);
	}
	
	/**获取一些主键：nextvalN('',n)   ??   callstatement
		<value expr="@Generator@nextvalN('','#{n}')"/>
		
		oracle正则替换：
		<!\[CDATA\[SELECT\s+(.*?)\.NEXTVAL\s*FROM\s*DUAL\s*CONNECT\s*BY\s*LEVEL<\=\#\{n\}\]\]>
		<value expr="@Generator@nextvalN('$1','#{n}')"/> */ 
	public static String nextvalN(String seqName,String n)
	{
		return translator.nextvalN(seqName,n);
	}
	
	/**获取一些主键：nextvalN('',n) 
	<value expr="@Generator@nextvalN('',n)"/>*/ 
	public static String nextvalN(String seqName,int n)
	{
		return translator.nextvalN(seqName,String.valueOf(n));
	}
	
	/**限制：limit(n,hasCriteria)
		<value expr="@Generator@limit('#{n}',false)"/>*/ 
	public static String limit(String count,boolean hasCriteria)
	{
		return translator.limit(count, hasCriteria);
	}
	
	/**限制：limit(n,hasCriteria)
	<value expr="@Generator@limit(n,false)"/>*/ 
	public static String limit(int count,boolean hasCriteria)
	{
		return translator.limit(String.valueOf(count), hasCriteria);
	}

	/**字符串转日期 strToDate('',format) format: yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd 
	<value expr="@Generator@strToDate('','')"/>*/ 
	public static String strToDate(String dateStr,String format)
	{
		if(dateStr==null||format==null)
			return "";
		return translator.strToDate(dateStr, format);
	}
	
	/**关键字处理 keywordEscape
		<value expr="@Generator@keywordEscape('')"/>*/
	public static String keywordEscape(String keyword)
	{
		return translator.keywordEscape(keyword);
	}

	
	@Autowired
	public void setTranslator(Translator translator)
	{
		this.translator=translator;
	}
}
